﻿using System;
using System.Collections.Generic;
using System.Text;

namespace NGI_Entidades
{
    public class Usuario : CamposAuditoria
    {
        private Int32 _id = 0;
        private String _nombre = "";
        private String _apellido = "";
        private String _nombreUsuario = "";
        private String _contrasena = "";
        private String _email = "";
        private Boolean _activo;
        private Rol _rol;

        public Int32 ID
        {
            get { return _id; }
            set { _id = value; }
        }

        public String Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }

        public String Email
        {
            get { return _email; }
            set { _email = value; }
        }

        public String Apellido
        {
            get { return _apellido; }
            set { _apellido = value; }
        }

        public String NombreUsuario
        {
            get { return _nombreUsuario; }
            set { _nombreUsuario = value; }
        }

        public String Contrasena
        {
            get { return _contrasena; }
            set { _contrasena = value; }
        }

        public Rol MiRol
        {
            get { return _rol; }
            set { _rol = value; }
        }

        public Boolean Activo
        {
            get { return _activo; }
            set { _activo = value; }
        }

        public Usuario() { }

        public Usuario(String NombreUsuario, String Contrasena)
        {
            this._nombreUsuario = NombreUsuario;
            this._contrasena = Contrasena;
        }

        public Usuario(Int32 ID, String Nombre, String Apellido)
        {
            this._id = ID;
            this._nombre = Nombre;
            this._apellido = Apellido;
        }

        public Usuario(Int32 ID, String Nombre, String Apellido, String NombreUsuario, String Email, Boolean Activo, Rol MiRol)
        {
            this._id = ID;
            this._nombreUsuario = NombreUsuario;
            this._apellido = Apellido;
            this._nombre = Nombre;
            this._email = Email;
            this._activo = Activo;
            this._rol = MiRol;
        }

        public Usuario(String Nombre, String Apellido, String NombreUsuario, String Email, String Contrasena, Boolean Activo, Rol MiRol)
        {
            this._nombreUsuario = NombreUsuario;
            this._apellido = Apellido;
            this._nombre = Nombre;
            this._email = Email;
            this._contrasena = Contrasena;
            this._activo = Activo;
            this._rol = MiRol;
        }

        public static Usuario UsuarioExistente(Int32 ID, String Nombre, String Apellido, String NombreUsuario, String Email, Boolean Activo, Rol MiRol)
        {
            return new Usuario(ID, Nombre, Apellido, NombreUsuario, Email, Activo, MiRol);
        }

        public static Usuario Nuevo(String Nombre, String Apellido, String NombreUsuario, String Email, String Contrasena, Boolean Activo, Rol MiRol)
        {
            return new Usuario(Nombre, Apellido, NombreUsuario, Email, Contrasena, Activo, MiRol);
        }

        public static Usuario ALoguear(String NombreUsuario, String Contrasena)
        {
            return new Usuario(NombreUsuario, Contrasena);
        }

        public static Usuario ParaListar(Int32 ID, String Nombre, String Apellido)
        {
            return new Usuario(ID, Nombre, Apellido);
        }

        public void Soy(Int32 Id, String Nombre, String Apellido, Rol UnRol)
        {
            this._id = Id;
            this._nombre = Nombre;
            this._apellido = Apellido;
            this._rol = UnRol;
        }

        public Boolean PuedeLoguear()
        {
            return !String.IsNullOrEmpty(this._nombreUsuario) && !String.IsNullOrEmpty(this._contrasena);
        }
    }
}
